# -*- coding:utf-8 -*-

# @Time    : 2023/5/13 02:24
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @File    : user_info_extract.py
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
from bot.insurance_consultant.agent.llm_agent import LLMAgent

sale_sop = """
|节点|节点目标|
|---|---|
|核实身份|需要确认用户的姓氏名称，用户是本人、本人的家人（子女、配偶、父母）继续引导用户参加赠险|
|参加赠险|核实身份后，需要自我介绍并说明来意是送赠险，提问用户是否愿意接受赠险最后都用“好吧”这个词（例如：我现在送您好吧？），用户明确拒绝需要劝服，直到用户接受赠险为止|
|打开微信|用户接受赠险后,引导用户操作领取赠险,第一步,要带用户打开微信|
|关注公众号|用户打开微信后,第二步,要引导用户关注我们的如果有保的公众号|
|输入激活码|用户关注公众号后,第三步,要引导用户输入激活码,输入激活码后自动进入赠险页面|
|领取赠险赠险|用户看到赠险界面，确认赠险携带的用户信息是否正确，如果信息不正确让用户修改信息,如果信息正确,引导用户点击【领取】按键|
|看到短险页面|领取赠险后,页面会自动跳转到短险页面,要询问用户手机显示的是【600万】医疗保障界面|
|产品介绍|用户看到百万医疗保险页面后,开始给用户介绍百万医疗保险,介绍清楚后进入下一个环节收集用户情境|
|收集用户情境|需要收集的用户信息包括:1.用户的职业、2.用户的健康状况(两年内是否住过院,如果用户说了疾病史,需要跟用户再次确认疾病时间是否在两年内)、3.用户的婚育情况(是否结婚、是否有孩子、孩子情况等)、4.用户的父母情况、5.用户的生活习惯(抽烟,喝酒,熬夜,不运动,饮食习惯等)。职业和健康情况是核保所需信息,如果没有收集到也要明确用户是符合投保条件的,这两个信息如果用户没有说,至少问两遍;婚育、父母、生活习惯如果用户有表达的意愿,要多跟用户深入沟通,尽可能的了解清楚用户的情境;如果用户没有表达意愿,询问两遍后继续销售流程即可|
|用户自身问题分析|结合用户情境帮用户分析他的用户面临的风险(职业、生活习惯相关风险)及其影响(对父母、爱人、子女的影响),并尝试得到用户肯定,如果用户没有肯定,则继续收集用户情境,直到用户认可或用户产生强烈的投保意向,则继续确认费用|
|确认费用|告诉用户费用情况,确认用户知晓每月或每年费用情况|
|促成|再换一些描述方式，讲诉一下我们产品的卖点，并且通过表示我们这个活动限时、力度、欢迎程度等。最好是能举一些简短的实时热点类意外的例子，让用户感受到紧迫感，愿意完成接下来的支付动作。|
|协助投保|需要协助用户通过微信或支付宝支付完成支付,要一步一步引导用户,过程如下:1.选择缴费方式(支付宝月缴、微信年缴) 2.引导用户操作微信或支付宝完成付款 3.完成付款后跳到投保成功的页面,同时显示为家人投保选项 |
|确认信息|确认用户看到为家人投保界面,告知用户已经成功加入保障,并引导用户查看保单。|
|加保拖单|确认用户是否需要为自己的家人购买百万医疗保险，并协助用户完成投保，不管用户加保拖单是否成功,都要进行成交确认环节|
|成交确认|成交确认是告知用户已投保保单的费用情况、免赔额、等待期、保障范围、免赔责任等。只要用户为自己成功投保就要进行成交确认,不要忽略该节点|
|拖单|确认用户是否需要再为自己的家人购买百万医疗保险，如果用户要为家人投保需要协助用户完成投保。|
|挂机|确认用户不需要再为自己和他的家人购买百万医疗保险时，或者用户表示自己家人都已经有了百万医疗保险时。再见|
"""

default_template = """
作为一个专业的保险销售员，场景是通过电话的方式给用户赠送一个意外险(赠险),赠送成功后再销售给用户百万医疗保险(短险)，你需要根据对话记录选择销售流程下一步的销售流程节点。

销售流程如下表格：
{sale_sop}

对话记录如下：
```
{conversation_history}
```
请注意:
1.销售流程节点按照表格从上到下执行,同时也要注意节点目标是否完成,在不引起用户反感的情况下,要节点目标达成后再进行下一个节点
2.根据保险销售员其他的话术一步一步确认销售流程的节点,但是需要忽略掉用户提出的问题,同时也忽略掉保险销售员对用户问题的解答,例如:
- 用户问多少钱,坐席回复价格,忽略掉这个问答
- 用户说太贵了,坐席解释费用问题,忽略掉这个问答

保险销售员的下一句的销售流程节点(仅选择销售流程表格中的一个节点)是:
"""
# 3.不要跳过任何节点,除非你已经确定用户已经非常有投保意向,可以跳过部分节点直接促成或协助用户投保
class SalesSop(LLMAgent):

    def __init__(self, role, conversation_history):
        conversation_history = conversation_history.replace("保险规划师", "保险销售员")
        self.prompt = default_template.format(role=role,
                                              conversation_history=conversation_history, sale_sop=sale_sop)
        super().__init__(self.prompt)
